package org.ht.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Esta classe agrupa funções de conversão de formatos e tipos de dados
 * para datas.
 * @author Issao Hanaoka Jr.
 */
public class FormatadorData {

    public FormatadorData() {
    }
    
    /**
     * Recebe uma string de data no formato dd/MM/yyyy e retorna um Date
     * correspondente.
     * @param data
     * @return Date
     */
    public static Date getData(String data) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        sdf.setLenient(false);
        try {
            return sdf.parse(data);
        } catch (ParseException ex) {
            Logger.getLogger(FormatadorData.class.getName()).log(Level.SEVERE, null, ex);
            throw new ParseException("Formato de data inválido.",0);
        }
        
    }

    /**
     * Recebe uma String de data e uma String que define o formato. Retorna
     * um Date.
     * @param formato
     * @param data
     * @return Date
     * @throws ParseException 
     */
    public static Date getData(String formato, String data) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(formato);
        sdf.setLenient(false);
        try {
            return sdf.parse(data);
        } catch (ParseException ex) {
            Logger.getLogger(FormatadorData.class.getName()).log(Level.SEVERE, null, ex);
            throw new ParseException("Formato de data inválido.",0);
        }
    }

    /**
     * Recebe uma data do tipo Date e retorna a data correspondente do tipo
     * String, no formato dd/MM/yyyy.
     * @param data
     * @return String
     */
    public static String getStringData(Date data) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        sdf.setLenient(false);
        return sdf.format(data);
    }

    /**
     * Recebe uma String definindo o formato da data e uma data do tipo Date,
     * e retorna a data correspondente do tipo String, em formato personalizado.
     * @param formato
     * @param data
     * @return String
     */
    public static String getStringData(String formato, Date data) {
        SimpleDateFormat sdf = new SimpleDateFormat(formato);
        sdf.setLenient(false);
        return sdf.format(data);
    }
}
